Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

core/database/src/commonTest/kotlin/org/meshtastic/core/database/ConvertersTest.kt d5848ad5e02bd9b5b1726bedfa51ceb0faaa0240 (d5848ad5) Text, 7.38 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.database

Tff7b72import T7ee787okio.ByteString
Tff7b72import T7ee787okio.ByteString.Companion.toByteString
Tff7b72import T7ee787org.meshtastic.core.model.DataPacket
Tff7b72import T7ee787org.meshtastic.core.model.MessageStatus
Tff7b72import T7ee787org.meshtastic.core.model.NodeAddress
Tff7b72import T7ee787org.meshtastic.proto.DeviceMetadata
Tff7b72import T7ee787org.meshtastic.proto.DeviceMetrics
Tff7b72import T7ee787org.meshtastic.proto.FromRadio
Tff7b72import T7ee787org.meshtastic.proto.HardwareModel
Tff7b72import T7ee787org.meshtastic.proto.Paxcount
Tff7b72import T7ee787org.meshtastic.proto.Position
Tff7b72import T7ee787org.meshtastic.proto.QueueStatus
Tff7b72import T7ee787org.meshtastic.proto.Telemetry
Tff7b72import T7ee787org.meshtastic.proto.User
Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertEquals
Tff7b72import T7ee787kotlin.test.assertNotNull
Tff7b72import T7ee787kotlin.test.assertNull

Tff7b72class T56d364ConvertersTest Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3converters Tff7b72= Te6edf3ConvertersTb4b4b4(Tb4b4b4)

Tf0883e@Test
Tff7b72fun Td2a8ff`data packet string converter round trips`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3packet Tff7b72=
Te6edf3DataPacketTb4b4b4(
Te6edf3to Tff7b72= Te6edf3NodeAddressTb4b4b4.Te6edf3ID_BROADCASTTb4b4b4,
Te6edf3bytes Tff7b72= Ta5d6ff"Ta5d6ffhello meshTa5d6ff"Tb4b4b4.Te6edf3encodeToByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toByteStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3dataType Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3from Tff7b72= Ta5d6ff"Ta5d6ff!12345678Ta5d6ff"Tb4b4b4,
Te6edf3id Tff7b72= T79c0ff4T79c0ff2Tb4b4b4,
Te6edf3status Tff7b72= Te6edf3MessageStatusTb4b4b4.Te6edf3DELIVEREDTb4b4b4,
Te6edf3hopLimit Tff7b72= T79c0ff3Tb4b4b4,
Te6edf3channel Tff7b72= T79c0ff2Tb4b4b4,
Te6edf3wantAck Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3rssi Tff7b72= Tff7b72-T79c0ff8T79c0ff0Tb4b4b4,
Tb4b4b4)

Tff7b72val Te6edf3encoded Tff7b72= Te6edf3convertersTb4b4b4.Te6edf3dataToStringTb4b4b4(Te6edf3packetTb4b4b4)
Tff7b72val Te6edf3decoded Tff7b72= Te6edf3convertersTb4b4b4.Te6edf3dataFromStringTb4b4b4(Te6edf3encodedTb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3packetTb4b4b4, Te6edf3decodedTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`from radio converter round trips`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertProtoRoundTripTb4b4b4(
Te6edf3expected Tff7b72= Te6edf3FromRadioTb4b4b4(Te6edf3queueStatus Tff7b72= Te6edf3QueueStatusTb4b4b4(Te6edf3res Tff7b72= T79c0ff1Tb4b4b4, Te6edf3free Tff7b72= T79c0ff2Tb4b4b4, Te6edf3mesh_packet_id Tff7b72= T79c0ff3Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3toBytes Tff7b72= Te6edf3convertersTff7b72::Te6edf3fromRadioToBytesTb4b4b4,
Te6edf3fromBytes Tff7b72= Te6edf3convertersTff7b72::Te6edf3bytesToFromRadioTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`user converter round trips`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertProtoRoundTripTb4b4b4(
Te6edf3expected Tff7b72=
Te6edf3UserTb4b4b4(Te6edf3id Tff7b72= Ta5d6ff"Ta5d6ff!abcdef01Ta5d6ff"Tb4b4b4, Te6edf3long_name Tff7b72= Ta5d6ff"Ta5d6ffTest UserTa5d6ff"Tb4b4b4, Te6edf3short_name Tff7b72= Ta5d6ff"Ta5d6ffTUTa5d6ff"Tb4b4b4, Te6edf3hw_model Tff7b72= Te6edf3HardwareModelTb4b4b4.Te6edf3TBEAMTb4b4b4)Tb4b4b4,
Te6edf3toBytes Tff7b72= Te6edf3convertersTff7b72::Te6edf3userToBytesTb4b4b4,
Te6edf3fromBytes Tff7b72= Te6edf3convertersTff7b72::Te6edf3bytesToUserTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`position converter round trips`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertProtoRoundTripTb4b4b4(
Te6edf3expected Tff7b72=
Te6edf3PositionTb4b4b4(Te6edf3latitude_i Tff7b72= T79c0ff4T79c0ff5T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0Tb4b4b4, Te6edf3longitude_i Tff7b72= T79c0ff9T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0T79c0ff0Tb4b4b4, Te6edf3altitude Tff7b72= T79c0ff1T79c0ff2T79c0ff3Tb4b4b4, Te6edf3time Tff7b72= T79c0ff4T79c0ff5T79c0ff6Tb4b4b4, Te6edf3sats_in_view Tff7b72= T79c0ff7Tb4b4b4)Tb4b4b4,
Te6edf3toBytes Tff7b72= Te6edf3convertersTff7b72::Te6edf3positionToBytesTb4b4b4,
Te6edf3fromBytes Tff7b72= Te6edf3convertersTff7b72::Te6edf3bytesToPositionTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`telemetry converter round trips`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertProtoRoundTripTb4b4b4(
Te6edf3expected Tff7b72=
Te6edf3TelemetryTb4b4b4(
Te6edf3time Tff7b72= T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4,
Te6edf3device_metrics Tff7b72=
Te6edf3DeviceMetricsTb4b4b4(
Te6edf3battery_level Tff7b72= T79c0ff8T79c0ff5Tb4b4b4,
Te6edf3voltage Tff7b72= T79c0ff4.1fTb4b4b4,
Te6edf3channel_utilization Tff7b72= T79c0ff0.12fTb4b4b4,
Te6edf3air_util_tx Tff7b72= T79c0ff0.05fTb4b4b4,
Te6edf3uptime_seconds Tff7b72= T79c0ff1T79c0ff2T79c0ff3T79c0ff4T79c0ff5T79c0ff6Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3toBytes Tff7b72= Te6edf3convertersTff7b72::Te6edf3telemetryToBytesTb4b4b4,
Te6edf3fromBytes Tff7b72= Te6edf3convertersTff7b72::Te6edf3bytesToTelemetryTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`paxcount converter round trips`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertProtoRoundTripTb4b4b4(
Te6edf3expected Tff7b72= Te6edf3PaxcountTb4b4b4(Te6edf3wifi Tff7b72= T79c0ff1T79c0ff0Tb4b4b4, Te6edf3ble Tff7b72= T79c0ff5Tb4b4b4, Te6edf3uptime Tff7b72= T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4,
Te6edf3toBytes Tff7b72= Te6edf3convertersTff7b72::Te6edf3paxCounterToBytesTb4b4b4,
Te6edf3fromBytes Tff7b72= Te6edf3convertersTff7b72::Te6edf3bytesToPaxcounterTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`device metadata converter round trips`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertProtoRoundTripTb4b4b4(
Te6edf3expected Tff7b72= Te6edf3DeviceMetadataTb4b4b4(Te6edf3firmware_version Tff7b72= Ta5d6ff"Ta5d6ff2.5.0Ta5d6ff"Tb4b4b4, Te6edf3hw_model Tff7b72= Te6edf3HardwareModelTb4b4b4.Te6edf3HELTEC_V3Tb4b4b4, Te6edf3hasWifi Tff7b72= Tff7b72falseTb4b4b4)Tb4b4b4,
Te6edf3toBytes Tff7b72= Te6edf3convertersTff7b72::Te6edf3metadataToBytesTb4b4b4,
Te6edf3fromBytes Tff7b72= Te6edf3convertersTff7b72::Te6edf3bytesToMetadataTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`empty proto messages round trip to empty defaults`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Te6edf3FromRadioTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToFromRadioTb4b4b4(Te6edf3convertersTb4b4b4.Te6edf3fromRadioToBytesTb4b4b4(Te6edf3FromRadioTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3UserTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToUserTb4b4b4(Te6edf3convertersTb4b4b4.Te6edf3userToBytesTb4b4b4(Te6edf3UserTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3PositionTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToPositionTb4b4b4(Te6edf3convertersTb4b4b4.Te6edf3positionToBytesTb4b4b4(Te6edf3PositionTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3TelemetryTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToTelemetryTb4b4b4(Te6edf3convertersTb4b4b4.Te6edf3telemetryToBytesTb4b4b4(Te6edf3TelemetryTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3PaxcountTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToPaxcounterTb4b4b4(Te6edf3convertersTb4b4b4.Te6edf3paxCounterToBytesTb4b4b4(Te6edf3PaxcountTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3DeviceMetadataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToMetadataTb4b4b4(Te6edf3convertersTb4b4b4.Te6edf3metadataToBytesTb4b4b4(Te6edf3DeviceMetadataTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`empty byte arrays decode to empty proto messages`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3emptyBytes Tff7b72= Te6edf3byteArrayOfTb4b4b4(Tb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3FromRadioTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToFromRadioTb4b4b4(Te6edf3emptyBytesTb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3UserTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToUserTb4b4b4(Te6edf3emptyBytesTb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3PositionTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToPositionTb4b4b4(Te6edf3emptyBytesTb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3TelemetryTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToTelemetryTb4b4b4(Te6edf3emptyBytesTb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3PaxcountTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToPaxcounterTb4b4b4(Te6edf3emptyBytesTb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3DeviceMetadataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToMetadataTb4b4b4(Te6edf3emptyBytesTb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`string list converter round trips and handles null`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3value Tff7b72= Te6edf3listOfTb4b4b4(Ta5d6ff"Ta5d6ffalphaTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbetaTa5d6ff"Tb4b4b4)

Tff7b72val Te6edf3encoded Tff7b72= Te6edf3convertersTb4b4b4.Te6edf3toStringListTb4b4b4(Te6edf3valueTb4b4b4)
Te6edf3assertNotNullTb4b4b4(Te6edf3encodedTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3valueTb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3fromStringListTb4b4b4(Te6edf3encodedTb4b4b4)Tb4b4b4)
Te6edf3assertNullTb4b4b4(Te6edf3convertersTb4b4b4.Te6edf3toStringListTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4)
Te6edf3assertNullTb4b4b4(Te6edf3convertersTb4b4b4.Te6edf3fromStringListTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`byte string converter round trips and handles null`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3value Tff7b72= Te6edf3byteArrayOfTb4b4b4(T79c0ff1Tb4b4b4, T79c0ff2Tb4b4b4, T79c0ff3Tb4b4b4, T79c0ff4Tb4b4b4)Tb4b4b4.Te6edf3toByteStringTb4b4b4(Tb4b4b4)

Tff7b72val Te6edf3encoded Tff7b72= Te6edf3convertersTb4b4b4.Te6edf3byteStringToBytesTb4b4b4(Te6edf3valueTb4b4b4)
Te6edf3assertNotNullTb4b4b4(Te6edf3encodedTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3valueTb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToByteStringTb4b4b4(Te6edf3encodedTb4b4b4)Tb4b4b4)
Te6edf3assertNullTb4b4b4(Te6edf3convertersTb4b4b4.Te6edf3byteStringToBytesTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4)
Te6edf3assertNullTb4b4b4(Te6edf3convertersTb4b4b4.Te6edf3bytesToByteStringTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`empty byte arrays round trip as empty byte strings`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3emptyByteString Tff7b72= Te6edf3ByteStringTb4b4b4.Te6edf3EMPTY

Tff7b72val Te6edf3encoded Tff7b72= Te6edf3convertersTb4b4b4.Te6edf3byteStringToBytesTb4b4b4(Te6edf3emptyByteStringTb4b4b4)
Te6edf3assertNotNullTb4b4b4(Te6edf3encodedTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3encodedTb4b4b4.Te6edf3sizeTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3emptyByteStringTb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3bytesToByteStringTb4b4b4(Te6edf3byteArrayOfTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`message status converter round trips and defaults unknown`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(
Te6edf3MessageStatusTb4b4b4.Te6edf3DELIVEREDTb4b4b4,
Te6edf3convertersTb4b4b4.Te6edf3intToMessageStatusTb4b4b4(Te6edf3convertersTb4b4b4.Te6edf3messageStatusToIntTb4b4b4(Te6edf3MessageStatusTb4b4b4.Te6edf3DELIVEREDTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3MessageStatusTb4b4b4.Te6edf3UNKNOWNTb4b4b4.Te6edf3ordinalTb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3messageStatusToIntTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3MessageStatusTb4b4b4.Te6edf3UNKNOWNTb4b4b4, Te6edf3convertersTb4b4b4.Te6edf3intToMessageStatusTb4b4b4(Tff7b72-T79c0ff1Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Tff7b72<Te6edf3TTff7b72> Td2a8ffassertProtoRoundTripTb4b4b4(Te6edf3expectedTb4b4b4: Te6edf3TTb4b4b4, Te6edf3toBytesTb4b4b4: Tb4b4b4(Te6edf3TTb4b4b4) Tff7b72-Tff7b72> Te6edf3ByteArrayTb4b4b4, Te6edf3fromBytesTb4b4b4: Tb4b4b4(Te6edf3ByteArrayTb4b4b4) Tff7b72-Tff7b72> Te6edf3TTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3encoded Tff7b72= Te6edf3toBytesTb4b4b4(Te6edf3expectedTb4b4b4)
Tff7b72val Te6edf3decoded Tff7b72= Te6edf3fromBytesTb4b4b4(Te6edf3encodedTb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3expectedTb4b4b4, Te6edf3decodedTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.06s